home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / s0ftpj / sec_lkm.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-12-17  |  3.3 KB  |  130 lines

  1. /*
  2.  * Name: LKM DETECT0R
  3.  * Date: Tue Apr 18 12:00:16 2000
  4.  * Author: pIGpEN [ pigpen@s0ftpj.org, deadhead@sikurezza.org ]
  5.  *
  6.  * SoftProject 2000 - Digital Sekurity for Y2k
  7.  * Sikurezza.org - Italian Security MailingList
  8.  * FreeBSD Abuser - Current does it better ! ;)
  9.  *
  10.  * COFFEE-WARE LICENSE - This source code is like "THE BEER-WARE LICENSE" by
  11.  * Poul-Henning Kamp <phk@FreeBSD.ORG> but you can give me in return a coffee.
  12.  *
  13.  * Tested on: FreeBSD 3.4-RELEASE FreeBSD 3.4-RELEASE #5: Mon Mar i386
  14.  *
  15.  * This module gives you a compare between a syscall & its kernel function...
  16.  * So You can detect lkm wich modifies your system...
  17.  *
  18.  * Note: This code is only a way to demostrate this ... you can also modify 
  19.  * this for *sw structure (ex. protosw, devsw and so on...)
  20.  *
  21.  * Compile with: make
  22.  *
  23.  * Use: make load
  24.  *     make unload
  25.  */
  26.  
  27. #include <sys/types.h>
  28. #include <sys/param.h>
  29. #include <sys/kernel.h>
  30. #include <sys/systm.h>
  31. #include <sys/module.h>
  32. #include <sys/sysent.h>
  33. #include <sys/sysproto.h>
  34. #include <sys/syscall.h>
  35.  
  36. static int    module_handler        __P((module_t, int, void *));
  37.  
  38. static moduledata_t S_Check = {
  39.     "scheck",
  40.     module_handler,
  41.     NULL
  42. };
  43.  
  44. DECLARE_MODULE(scheck, S_Check, SI_SUB_EXEC, SI_ORDER_MIDDLE);
  45.  
  46. #define    c(x, y, n) if(sysent[x].sy_call!=(sy_call_t *) y) \
  47.  printf("%s: altered! [function] at %p, [syscall] at %p\n", \
  48.          n, y, sysent[x].sy_call);
  49.  
  50. static int
  51. module_handler(module_t mod, int cmd, void *arg)
  52. {
  53.     switch(cmd) {
  54.         case MOD_LOAD:
  55.             c(SYS_exit,         exit,         "exit");
  56.             c(SYS_fork,         fork,         "fork");
  57.             c(SYS_read,         read,         "read");
  58.             c(SYS_write,         write,         "write");
  59.             c(SYS_open,        open,        "open");
  60.             c(SYS_close,        close,        "close");
  61.             c(SYS_wait4,        wait4,        "wait");
  62.             c(SYS_link,        link,        "link");
  63.             c(SYS_unlink,        unlink,        "unlink");
  64.             c(SYS_chdir,        chdir,        "chdir");
  65.             c(SYS_fchdir,        fchdir,        "fchdir");
  66.             c(SYS_mknod,        mknod,        "mknod");
  67.             c(SYS_chmod,        chmod,        "chmod");
  68.             c(SYS_chown,        chown,        "chown");
  69.             c(SYS_getfsstat,    getfsstat,    "getfsstat");
  70.             c(SYS_getpid,        getpid,        "getpid");
  71.             c(SYS_mount,        mount,        "mount");
  72.             c(SYS_unmount,        unmount,    "unmount");
  73.             c(SYS_setuid,        setuid,        "setuid");
  74.             c(SYS_getuid,        getuid,        "getuid");
  75.             c(SYS_mount,        mount,        "mount");
  76.             c(SYS_unmount,        unmount,    "unmount");
  77.             c(SYS_setuid,        setuid,        "setuid");
  78.             c(SYS_getuid,        getuid,        "getuid");
  79.             c(SYS_geteuid,        geteuid,    "geteuid");
  80.             c(SYS_ptrace,        ptrace,        "ptrace");
  81.             c(SYS_recvmsg,        recvmsg,    "recvmsg");
  82.             c(SYS_sendmsg,        sendmsg,    "sendmsg");
  83.             c(SYS_recvfrom,        recvfrom,    "recvfrom");
  84.  
  85.             /*
  86.              * ..... put here other syscalls ....
  87.              */
  88.  
  89.             c(SYS_ioctl,        ioctl,        "ioctl");    
  90.             c(SYS_setsockopt,    setsockopt,    "setsockopt");
  91.             c(SYS___sysctl,        __sysctl,    "sysctl");
  92.             break;
  93.     }
  94.  
  95.     return 0;
  96. }
  97.     
  98. /*            
  99.  
  100. # SoftProject 2000 - Digital Sekurity for Y2k
  101. # Sikurezza.org - Italian Security MailingList
  102. #
  103. # COFFEE-WARE LICENSE - This source code is like "THE BEER-WARE LICENSE" by
  104. # Poul-Henning Kamp <phk@FreeBSD.ORG> but you can give me in return a coffee.
  105. #
  106. # Tested on: FreeBSD 3.4-RELEASE FreeBSD 3.4-RELEASE #3: Thu Mar i386
  107. # < pigpen@s0ftpj.org > 
  108.  
  109. .PATH: /sys/kern
  110. SRCS    = sec_lkm.c 
  111. CFLAGS+= -I/sys
  112. KMOD    = seclkm 
  113. NOMAN    = t
  114. KLDMOD    = t
  115.  
  116. KLDLOAD        = /sbin/kldload
  117. KLDUNLOAD    = /sbin/kldunload
  118.  
  119. CLEANFILES+= ${KMOD}
  120.  
  121. load:
  122.     ${KLDLOAD} -v ./${KMOD}
  123.  
  124. unload:
  125.     ${KLDUNLOAD} -v -n ${KMOD}
  126.  
  127. .include <bsd.kmod.mk>
  128.  
  129. */
  130.